/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Servlets;
import beans.ProveedorForm;
import beans.auxiliares.Errores;
import beans.auxiliares.Oferta;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import modelo.GestionProveedor;
import modelo.beans.ClienteBean;
import modelo.beans.OfertasBean;
import modelo.beans.ProveedorBean;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.actions.DispatchAction;

/**
Aquí vamos a gestionar todas las acciones que tengan que ver con el proveedor.
* Al utilizar Dispach Action, las podemos tener todas recogidas en esta clase, lo que simplifica su comprensión.
 */
/**
 *
 * @author 
 */
public class GestionProveedoresAction extends DispatchAction {

            public ActionForward insertarProveedor (ActionMapping mapping, 
            ActionForm form, 
            HttpServletRequest request,
            HttpServletResponse response){
               
          //casteamos el form
          ProveedorForm formulario=(ProveedorForm)form;
          ProveedorBean pb;
         //capturamos la sesion y bean de sesion
          HttpSession sesion=request.getSession();
        //capturamos bean de sesion si existe o creamos nuevo
          pb=capturarMisDatos(sesion);
           //guardamos los datos necesarios 
          //en el objeto ProveeedorBean pb
          //obtenidos del formulario
           pb.setNombre(formulario.getNombre());
           pb.setContrasena(formulario.getContrasena());
           pb.setEmail(formulario.getEmail());
           pb.setTipo_oferta(formulario.getTipo_oferta());
           //accedemos al modelo
           System.out.println("Action: nombre: "+pb.getNombre());
             GestionProveedor gp=new GestionProveedor();
                String estado=gp.insertarProveedor(pb);//insertamos proveedor en bbdd 
                //nos devuelve estado=proveedor
                if (estado.equals("proveedor")){
                    //capturamos su idproveedor para guardarlo en ProveedorBean
                    pb.setIdproveedor(gp.getIdproveedor(pb.getNombre()));
                    sesion.setAttribute("proveedor",pb);
                }
                else{
                   return(mapping.findForward("existeproveedor")); 
                }
                return(mapping.findForward("success")); 
            }
      
 public ActionForward nuevaOferta(ActionMapping mapping, 
            ActionForm form, 
            HttpServletRequest request,
            HttpServletResponse response){
   
     ProveedorBean pb;
         //capturamos la sesion
          HttpSession sesion=request.getSession();
        //capturamos bean de sesion si existe o creamos nuevo
          pb=capturarMisDatos(sesion);
     return(mapping.findForward("nuevaoferta"));
 }           
 
public ActionForward insertarOferta (ActionMapping mapping, 
            ActionForm form, 
            HttpServletRequest request,
            HttpServletResponse response){
    
            String estado=null;
      //casteamos el form
          ProveedorForm formulario=(ProveedorForm)form;
          ProveedorBean pb;
         //capturamos la sesion y bean de sesion
          HttpSession sesion=request.getSession();
        //capturamos bean de sesion si existe o creamos nuevo
          pb=capturarMisDatos(sesion);
           //guardamos los datos necesarios en el objeto ProveeedorBean pb
          //para lo que usaremos Oferta ofertainsertar 
          Oferta ofertainsertar=new Oferta();
            ofertainsertar.setDescripcion(formulario.getDescripcion());
            ofertainsertar.setFecha_final(formulario.getFecha_final());
            ofertainsertar.setFecha_inicio(formulario.getFecha_inicio());
            ofertainsertar.setIdproveedor(pb.getIdproveedor());
            ofertainsertar.setMunicipio(formulario.getMunicipio());
            ofertainsertar.setPlazas_disponibles(formulario.getPlazas_disponibles());
            ofertainsertar.setPrecio(formulario.getPrecio());
           //accedemos al modelo para recuperar idproveedor
            GestionProveedor gp=new GestionProveedor();
                //ofertainsertar.setIdproveedor(gp.getIdproveedor(pb.getNombre()));
                  ofertainsertar.setIdproveedor(pb.getIdproveedor());
                 //guardamos ofertainsertar en bean
                pb.setOfertaparainsertar(ofertainsertar);
         //accedemos al modelo para validar proveedor
         //e insertar oferta nueva
          String perfil;
          perfil=gp.validar(pb.getNombre(),pb.getContrasena());
          if (perfil.equals("proveedor")){
                 //insertamos oferta
                 estado=gp.insertarOferta(ofertainsertar,pb.getIdproveedor());
                 if (estado.equals("ofertainsertada")){
                       estado="ofertainsertada"; 
                 }
                 else{
                       estado="ofertanoinsertada";
                 }
          }
          
      return(mapping.findForward(estado));
}

public ActionForward listarOfertas (ActionMapping mapping, 
            ActionForm form, 
            HttpServletRequest request,
            HttpServletResponse response){
    
          ProveedorBean pb;
         //capturamos la sesion y datos de sesion
          HttpSession sesion=request.getSession();
        //capturamos bean de sesion si existe o creamos nuevo
          pb=capturarMisDatos(sesion);
           OfertasBean ofertas; 
           //accedemos al modelo para recuperar ofertas
           GestionProveedor gp=new GestionProveedor();
            pb.setIdproveedor(gp.getIdproveedor(pb.getNombre()));
            ofertas=gp.listarOfertas(pb);
           request.setAttribute("Listaofertas", ofertas.getOfertas());        
     return(mapping.findForward("listaroferta"));    
    }
    /*
     * modificar una oferta
     *  capturando el "idoferta" desde request
     * return:"ofertamodificada"
     */
    public ActionForward modificarOferta (ActionMapping mapping, 
            ActionForm form, 
            HttpServletRequest request,
            HttpServletResponse response){
        
        ProveedorForm formulario=(ProveedorForm)form;
        //String a=request.getParameter("idoferta");
        int idofertamodificar;
        idofertamodificar=Integer.parseInt(request.getParameter("idoferta"));
        //idofertamodificar= Integer.parseInt(a);
       
        ProveedorBean pb;
         //capturamos la sesion y datos de sesion
          HttpSession sesion=request.getSession();
        //capturamos bean de sesion si existe o creamos nuevo
          pb=capturarMisDatos(sesion);
        //capturamos los nuevos datos del formulario en el bean
        pb.setOfertaparainsertar(formulario.getOfertaparainsertar());
        //accedemos al modelo para modificar la oferta
        GestionProveedor gp=new GestionProveedor();
        gp.modificarOferta(idofertamodificar,pb.getOfertaparainsertar());
  
        return(mapping.findForward("ofertamodificada"));
    }
     /*
     * seleccionar una oferta 
     * return:"ofertaselecionada"
     */
    public ActionForward seleccionarOferta (ActionMapping mapping, 
            ActionForm form, 
            HttpServletRequest request,
            HttpServletResponse response){
        
        ProveedorForm formulario=(ProveedorForm)form;
        String a=request.getParameter("idoferta");
        ProveedorBean pb;
         //capturamos la sesion y datos de sesion
          HttpSession sesion=request.getSession();
        //capturamos bean de sesion si existe o creamos nuevo
          pb=capturarMisDatos(sesion);
        //obtenemos idofertamodificar
        int idofertamodificar;
        idofertamodificar=formulario.getIdoferta();

        Oferta oferta=new Oferta();
         //accedemos al modelo para modificar la oferta
        GestionProveedor gp=new GestionProveedor();
        oferta=gp.getOferta(idofertamodificar);
        formulario.setOfertaparainsertar(oferta);
        request.setAttribute("ofertamodificar", oferta);
        //request.setAttribute("proveedor", pb);
        return(mapping.findForward("ofertaseleccionada"));
    }
    /*
     * login al proveedor
     * return:"logado" o "nologado"
     * 
     */
        public ActionForward login (ActionMapping mapping, 
            ActionForm form, 
            HttpServletRequest request,
            HttpServletResponse response){
            
      //casteamos el form de entrada de datos
          ProveedorForm formulario=(ProveedorForm)form;
          ProveedorBean pb;
      //capturamos la sesion y datos de sesion
          HttpSession sesion=request.getSession();
      //capturamos bean de sesion si existe o creamos nuevo
          pb=capturarMisDatos(sesion);
           //capturamos datos del formulario en PrveedorBean pb
           pb.setNombre(formulario.getNombre());
           pb.setContrasena(formulario.getContrasena());
           String perfil;
           //accedemos al modelo para validar al proveedor
           GestionProveedor gp=new GestionProveedor();
           perfil=gp.validar(pb.getNombre(), pb.getContrasena());
           if(perfil.equals("proveedor")){
               pb.setLogado("logado");
               //accedemos al modelo para capturar el idproveedor y guardamos en bean
                    pb.setIdproveedor(gp.getIdproveedor(pb.getNombre()));
               sesion.setAttribute("proveedor",pb);
               return(mapping.findForward("logado"));//proveedor validado
           }
           else{
           return(mapping.findForward("nologado"));
           }
        }
    /*
     * loginOff al proveedor
     * return:"logado" o "nologado"
     * 
     */
        public ActionForward loginOff (ActionMapping mapping, 
            ActionForm form, 
            HttpServletRequest request,
            HttpServletResponse response){
            
            ProveedorForm formulario=(ProveedorForm)form;
           
            formulario.reset(mapping, request);
            //GestionProveedor gp=new GestionProveedor();
            //gp.loginOff();
          ProveedorBean pb;
      //capturamos la sesion y datos de sesion
          HttpSession sesion=request.getSession();
      //capturamos bean de sesion si existe o creamos nuevo
          pb=capturarMisDatos(sesion);
            sesion.invalidate();
     return (mapping.findForward("loginoff"));
        }
        
        private ProveedorBean capturarMisDatos(HttpSession sesion){
            //capturamos el bean del proveedor
           Object attribute = sesion.getAttribute("proveedor");
         ProveedorBean pb;
           if(attribute==null){
               pb=new ProveedorBean();
           }
           else{
               pb=(ProveedorBean)attribute;
           }
            return pb;
        }
}
